Memory devices are typically provided as internal, semiconductor, integrated circuits in computers or other electronic devices. There are many different types of memory including random-access memory (RAM), read only memory (ROM), dynamic random access memory (DRAM), synchronous dynamic random access memory (SDRAM), and non-volatile/flash memory.
Flash memory devices have developed into a popular source of non-volatile memory for a wide range of electronic applications. Flash memory devices typically use a one-transistor memory cell that allows for high memory densities, high reliability, and low power consumption. Common uses for flash memory include personal computers, personal digital assistants (PDAs), digital cameras, and cellular telephones. Program code and system data such as a basic input/output system (BIOS) are typically stored in flash memory devices for use in personal computer systems.
Each cell in a non-volatile memory device can be programmed as a single bit per cell (i.e., single level cell—SLC) or multiple bits per cell (i.e., multilevel cell—MLC). Each cell's threshold voltage (Vt) determines the data that is stored in the cell. For example, in an SLC memory, a Vt of 0.5V might indicate a programmed cell while a Vt of −0.5V might indicate an erased cell. The MLC has multiple positive Vt ranges that each indicates a different state whereas a negative Vt range typically indicates an erased state. An MLC memory can take advantage of the analog nature of a traditional flash cell by assigning a bit pattern to a specific voltage range stored on the cell. The collection of different Vt ranges (each of which representing a different programmable state) together are part of a fixed program window that encompasses the fixed voltage range over which a memory device is programmable. Each of the ranges are separated by a voltage space (“margin”) that is relatively small due to the limitations of fitting a number of states into the program window of a typical low voltage memory device.
FIG. 1 illustrates a typical fixed program window 100 of a non-volatile memory device. The illustrated program window 100 encompasses six programmable states L1-L6 such that the distributions 102-107 for all the programmable states fit within the program window 100 (as used herein, a “distribution” for a state refers to a number of cells having a Vt within the particular range of Vt's corresponding to that state). The program window 100 for a memory device is determined during manufacture of the device as a result of an engineering assessment. The assessment determines a maximum Vt of the erased state distribution L0 101 and a minimum Vt of the “highest” distribution L7 108. The state L7 corresponding to the highest range of Vt's may not be used due to the relatively large voltages required to program this state and/or the program disturb that can result from these programming voltages, in which case it is excluded from the fixed program window 100, as illustrated in FIG. 1.
One problem with a fixed program window is that the programming characteristics (maximum programmable voltage, number of programming pulses required, speed of programming) of a memory device typically change as the memory experiences an increasing number of program/erase cycles. Also, the programming characteristics can vary between memory dies as well as between memory blocks and/or pages of each memory die.
For the reasons stated above, and for other reasons stated below which will become apparent to those skilled in the art upon reading and understanding the present specification, there is a need in the art for a way to dynamically determine a program window in a memory device.